Problem
【SDOI2016】数字配对
Description
有 种数字,第 种数字是 、有 个,权值是 。
若两个数字 满足, 是 的倍数,且 是一个质数,那么这两个数字可以配对,并获得 的价值。
一个数字只能参与一次配对,可以不参与配对。
在获得的价值总和不小于 的前提下,求最多进行多少次配对。
Input
第一行一个整数 。
第二行 个整数 。
第三行 个整数。
第四行 个整数 。
Output
Sample Input
1 | 3 |
Sample Output
1 | 4 |
HINT
标签:费用流
Solution
比较难想的二分图建模。
记为分解质因数后的项数(算两项),为质数的充要条件为。
可知奇偶性相同的一定不能配对,所以可建二分图,为奇在一边,为偶在另一边。
两边间连边则看是否有整除条件,流量为,费用为。
把每个点拆成左右两个点,左边与源点相连,右边与汇点相连,容量为 ,费用为零。
跑费用流每增广一次就判一下是否费用小于 ,注意最后退出的时候不要把新加入的流全退完,退一部分至刚好大于等于即可。
Code
1 |
|